SciPy는 각종 수치 해석 기능을 제공하는 파이썬 패키지다. SciPy는 여러개의 서브 패키지로 구성되어 있는데 그 중 scipy.stats 서브패키지는 여러가지 확률 분포 분석을 위한 기능을 제공한다.
SciPy에서 확률 분포 기능을 사용하려면 우선 해당 확률 분포에 대한 확률 분포 객체라는 것을 생성한 후에 이 객체의 메서드를 호출한다.
확률 분포 객체를 생성하는 명령에는 다음과 같은 것들이 있다.
종류 | 이름 | 확률 분포 |
---|---|---|
이산 | bernoulli |
베르누이 분포 |
이산 | binom |
이항 분포 |
연속 | uniform |
균일 분포 |
연속 | norm |
가우시안 정규 분포 |
연속 | beta |
베타 분포 |
연속 | gamma |
감마 분포 |
연속 | t |
스튜던트 t 분포 |
연속 | chi2 |
카이 제곱 분포 |
연속 | f |
F 분포 |
연속 | dirichlet |
디리클리 분포 |
연속 | multivariate_normal |
다변수 가우시안 정규 분포 |
이 명령들은 모두 scipy.stats 서브패키지에 포함되어 있으므로 명령 앞에 서브패키지 이름과 마침표를 붙여야 한다. 예를 들어 가우시안 정규 분포 객체는 다음과 같이 생성한다.
In [3]:
import scipy as sp
In [4]:
rv = sp.stats.norm()
In [2]:
type(rv)
Out[2]:
확률 분포 객체를 생성할 때는 분포의 모수(parameter)를 인수로 지정해 주어야 한다. 각 확률 분포마다 지정해 주어야 할 모수가 다르므로 자세한 설명은 문서를 참조하여야 하지만 대부분 다음과 같은 모수들을 공통적으로 가진다.
모수 또는 인수 | 의미 |
---|---|
loc |
일반적으로 분포의 기댓값 |
scale |
일반적으로 분포의 표준편차 |
size |
샘플 생성시 생성될 샘플의 크기 |
random_state |
샘플 생성시 사용되는 시드(seed)값 |
예를 들어 기댓값이 1이고 표준 편차가 2인 정규 분포 객체는 다음과 같이 생성한다.
In [23]:
rv = sp.stats.norm(loc=1, scale=2)
확률 분포 객체가 가지는 메서드는 다음과 같다.
메서드 | 기능 |
---|---|
pdf |
확률 밀도 함수 (probability density function) |
pmf |
확률 질량 함수 (probability mass function) |
cdf |
누적 분포 함수 (cumulative distribution function) |
rvs |
랜덤 샘플 생성 (random variable sampling) |
stats |
기술 통계 함수 (descriptive statistics) |
fit |
모수 추정 (parameter estimation) |
메서드 사용법은 다음과 같다.
In [24]:
xx = np.linspace(-8, 8, 100)
pdf = rv.pdf(xx)
plt.plot(xx, pdf)
plt.show()
In [25]:
xx = np.linspace(-8, 8, 100)
cdf = rv.cdf(xx)
plt.plot(xx, cdf)
plt.show()
In [26]:
rv.rvs(size=(3,5), random_state=0)
Out[26]:
In [28]:
sns.distplot(rv.rvs(size=10000, random_state=0))
plt.xlim(-8, 8)
plt.show()